package avicit.bdp.dgs.qa.dao;

import avicit.bdp.common.base.BaseDAO;
import avicit.bdp.common.dto.ProcessInstanceDto;
import avicit.bdp.dgs.qa.dto.JobDTO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @金航数码科技有限责任公司
 * @作者：developer
 * @邮箱：developer@avic-digital.com
 * @创建时间： 2023-03-30
 * @类说明：JobDAO
 * @修改记录：
 * @注意事项：
 * @主要功能：质量作业DAO
 */
@Repository
public interface JobDAO extends BaseDAO<JobDTO> {
    /**
     * 分页查询-根据条件查询作业列表
     *
     * @param keyWords
     * @param measureType
     * @param schedulerType
     * @param resultType
     * @param state
     * @param datasourceName
     * @param tableName
     * @return
     */
    Page<JobDTO> queryJobByCond(@Param("keyWords") String keyWords,
                                @Param("measureType") Integer measureType,
                                @Param("schedulerType") Integer schedulerType,
                                @Param("resultType") Integer resultType,
                                @Param("state") Integer state,
                                @Param("datasourceName") String datasourceName,
                                @Param("tableName") String tableName,
                                @Param("wordSecretList") List<String> wordSecretList);

    /**
     * 分页查询-根据条件查询文件校验作业列表
     *
     * @param keyWords
     * @param measureType
     * @param schedulerType
     * @param resultType
     * @param state
     * @return
     */
    Page<JobDTO> queryFileJobByCond(@Param("keyWords") String keyWords,
                                    @Param("measureType") Integer measureType,
                                    @Param("schedulerType") Integer schedulerType,
                                    @Param("resultType") Integer resultType,
                                    @Param("state") Integer state,
                                    @Param("wordSecretList") List<String> wordSecretList);

    /**
     * 查看详情
     *
     * @param id
     * @return
     */
    JobDTO getJobDetail(@Param("id") String id);

    /**
     * 删除/批量删除作业
     *
     * @param idList
     * @return
     */
    int deleteJobByCond(@Param("idList") List<String> idList);

    /**
     * 模板名字是否重复
     *
     * @param jobId
     * @param name
     * @return
     */
    long selectNameCount(@Param("jobId") String jobId, @Param("name") String name, @Param("measureType") Integer measureType);

    /**
     * 根据质量作业查询DDS中流程实例状态信息
     *
     * @param jobList
     * @return
     */
    List<ProcessInstanceDto> getProcInsListByJobId(@Param("jobList") List<JobDTO> jobList);

    /**
     * 批量更新任务状态
     *
     * @param jobList
     * @return
     */
    int batchUpdateJobState(@Param("jobList") List<JobDTO> jobList);

    /**
     * 统计作业数目
     *
     * @param startTime
     * @param endTime
     * @return
     */
    long countJob(@Param("startTime") String startTime,
                  @Param("endTime") String endTime,
                  @Param("wordSecretList") List<String> wordSecretList);

    /**
     * 根据作业状态统计数目
     *
     * @param state
     * @param startTime
     * @param endTime
     * @return
     */
    long countJobByState(@Param("state") Integer state,
                         @Param("startTime") String startTime,
                         @Param("endTime") String endTime);
}
